using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Decisions.HL7.Message;
using DecisionsFramework;

namespace Decisions.HL7.Message
{
    public class OverallClaimDispositionCodeAttribute:RuleAttribute
    {
        private Dictionary<HL7Version, string[]> validVersionCodes = new Dictionary<HL7Version, string[]>();
        private Dictionary<HL7Version, string[]> validVersionDescriptions = new Dictionary<HL7Version, string[]>();
        private Dictionary<HL7Version, HL7TableType> tableVersionTypes = new Dictionary<HL7Version, HL7TableType>();

        public OverallClaimDispositionCodeAttribute()
        {
            // init the values for table version types
						tableVersionTypes[HL7Version.v24] = HL7TableType.User;
						tableVersionTypes[HL7Version.v25] = HL7TableType.User;
						tableVersionTypes[HL7Version.v251] = HL7TableType.User;
						tableVersionTypes[HL7Version.v26] = HL7TableType.User;
						tableVersionTypes[HL7Version.v27] = HL7TableType.User;
			
            
			// init the values for version codes
						validVersionCodes[HL7Version.v24] = new string[]{"0","1","2","3","4"};
						validVersionCodes[HL7Version.v25] = new string[]{"0","1","2","3","4"};
						validVersionCodes[HL7Version.v251] = new string[]{"0","1","2","3","4"};
						validVersionCodes[HL7Version.v26] = new string[]{"0","1","2","3","4"};
						validVersionCodes[HL7Version.v27] = new string[]{"0","1","2","3","4"};
			
			// init the values for version descriptions
						validVersionDescriptions[HL7Version.v24] = new string[]{"No edits present on claim","Only edits present are for line item denial or rejection","Multiple-day claim with one or more days denied or rejected","Claim denied, rejected, suspended or returned to provider with only post payment edits","Claim denied, rejected, suspended or returned to provider with only pre payment edits"};
						validVersionDescriptions[HL7Version.v25] = new string[]{"No edits present on claim","Only edits present are for line item denial or rejection","Multiple-day claim with one or more days denied or rejected","Claim denied, rejected, suspended or returned to provider with only post payment edits","Claim denied, rejected, suspended or returned to provider with only pre payment edits"};
						validVersionDescriptions[HL7Version.v251] = new string[]{"No edits present on claim","Only edits present are for line item denial or rejection","Multiple-day claim with one or more days denied or rejected","Claim denied, rejected, suspended or returned to provider with only post payment edits","Claim denied, rejected, suspended or returned to provider with only pre payment edits"};
						validVersionDescriptions[HL7Version.v26] = new string[]{"No edits present on claim","Only edits present are for line item denial or rejection","Multiple-day claim with one or more days denied or rejected","Claim denied, rejected, suspended or returned to provider with only post payment edits","Claim denied, rejected, suspended or returned to provider with only pre payment edits"};
						validVersionDescriptions[HL7Version.v27] = new string[]{"No edits present on claim","Only edits present are for line item denial or rejection","Multiple-day claim with one or more days denied or rejected","Claim denied, rejected, suspended or returned to provider with only post payment edits","Claim denied, rejected, suspended or returned to provider with only pre payment edits"};
			            

        }

        
        public override ValidationIssue[] RunRule(string name, object owningObject, object value)
        {
            //todo: check if the value is valid in the current version
            //if the value is not valid in the current version, add it as a validation issue


            return new ValidationIssue[0];
        }
    }
}
